home *** CD-ROM | disk | FTP | other *** search
/ OpenGL Superbible (2nd Edition) / OpenGL SuperBible e2.iso / tools / GLUT-3.7 / PROGS / GLE / TEXTURE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-12  |  3.7 KB  |  151 lines

  1.  
  2. /*
  3.  * texture.c
  4.  *
  5.  * FUNCTION:
  6.  * texture mapping hack
  7.  *
  8.  * HISTORY:
  9.  * Created by Linas Vepstas April 1994
  10.  */
  11.  
  12. #include <stdlib.h>
  13. #include <math.h>
  14. #include "texture.h"
  15.  
  16. Texture * current_texture = 0x0;
  17.  
  18. Texture * planet_texture = 0x0;
  19. Texture * check_texture = 0x0;
  20. Texture * barberpole_texture = 0x0;
  21. Texture * wild_tooth_texture = 0x0;
  22.  
  23. /* ======================================================= */
  24.  
  25. #define TEXTURE_SIZE 256
  26.  
  27. Texture * create_planet_texture (void) {
  28.    int i, j;
  29.    Texture * tex;
  30.    unsigned char * pixmap;
  31.  
  32.    pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char));
  33.  
  34.    for (i=0; i< TEXTURE_SIZE; i++) {
  35.       for (j=0; j< TEXTURE_SIZE; j++) {
  36.  
  37.          int mi = i - TEXTURE_SIZE/2;
  38.          int mj = j - TEXTURE_SIZE/2;
  39.  
  40.          pixmap [3*TEXTURE_SIZE*i + 3*j] = (100*mi*mi + 40*mj*mj) >> 8;
  41.          pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = (10*mi*mi + 4*mj*mj) ;
  42.          pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = (1000*mi*mi + 400*mj*mj) >> 16 ;
  43.  
  44.       }
  45.    }
  46.  
  47.    tex = (Texture *) malloc (sizeof (Texture));
  48.    tex -> size = TEXTURE_SIZE;
  49.    tex -> pixmap = pixmap;
  50.  
  51.    return tex;
  52. }
  53.  
  54. /* ======================================================= */
  55.  
  56. Texture * create_check_texture (void) {
  57.    int i, j;
  58.    Texture * tex;
  59.    unsigned char * pixmap;
  60.  
  61.    pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char));
  62.  
  63.    for (i=0; i< TEXTURE_SIZE; i++) {
  64.       for (j=0; j< TEXTURE_SIZE; j++) {
  65.  
  66.          pixmap [3*TEXTURE_SIZE*i + 3*j] = 
  67.         255 * ( (((i)/32) %2) == (((j)/32) %2));
  68.          pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 
  69.         255 * ( (((i)/32) %2) == (((j)/32) %2));
  70.          pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 
  71.         255 * ( (((i)/32) %2) == (((j)/32) %2));
  72.       }
  73.    }
  74.  
  75.    tex = (Texture *) malloc (sizeof (Texture));
  76.    tex -> size = TEXTURE_SIZE;
  77.    tex -> pixmap = pixmap;
  78.  
  79.    return tex;
  80. }
  81.  
  82. /* ======================================================= */
  83.  
  84. Texture * create_barberpole_texture (void) {
  85.    int i, j;
  86.    Texture * tex;
  87.    unsigned char * pixmap;
  88.  
  89.    pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char));
  90.  
  91.    for (i=0; i< TEXTURE_SIZE; i++) {
  92.       for (j=0; j< TEXTURE_SIZE; j++) {
  93.          pixmap [3*TEXTURE_SIZE*i + 3*j] = 255 * (((i+j)/32) %2);
  94.          pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 255 * (((i+j)/32) %2);
  95.          pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 255 * (((i+j)/32) %2);
  96.  
  97.       }
  98.    }
  99.  
  100.    tex = (Texture *) malloc (sizeof (Texture));
  101.    tex -> size = TEXTURE_SIZE;
  102.    tex -> pixmap = pixmap;
  103.  
  104.    return tex;
  105. }
  106.  
  107. /* ======================================================= */
  108.  
  109. Texture * create_wild_tooth_texture (void) {
  110.    int i, j;
  111.    Texture * tex;
  112.    unsigned char * pixmap;
  113.  
  114.    pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char));
  115.  
  116.    for (i=0; i< TEXTURE_SIZE; i++) {
  117.       for (j=0; j< TEXTURE_SIZE; j++) {
  118.  
  119.          pixmap [3*TEXTURE_SIZE*i + 3*j] = 
  120.          255 * ( (((i+j)/32) %2) == (((i-j)/32) %2));
  121.          pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 
  122.          255 * ( (((i+j)/32) %2) == (((i-j)/32) %2));
  123.          pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 
  124.          255 * ( (((i+j)/32) %2) == (((i-j)/32) %2));
  125.  
  126.       }
  127.    }
  128.  
  129.    tex = (Texture *) malloc (sizeof (Texture));
  130.    tex -> size = TEXTURE_SIZE;
  131.    tex -> pixmap = pixmap;
  132.  
  133.    return tex;
  134. }
  135.  
  136. /* ======================================================= */
  137.  
  138. void setup_textures (void) {
  139.  
  140.    planet_texture = create_planet_texture ();
  141.    check_texture = create_check_texture ();
  142.    barberpole_texture = create_barberpole_texture ();
  143.    wild_tooth_texture = create_wild_tooth_texture ();
  144.  
  145.    current_texture = wild_tooth_texture;
  146.    current_texture = check_texture;
  147. }
  148.  
  149.  
  150. /* ================== END OF FILE ========================= */
  151.